﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Inventario_HardSoft.ADO;

namespace Inventario_HardSoft.Controlador
{
    class Ctrl_Softwares
    {

        ConexionDataContext conexion;
        public Ctrl_Softwares()
        {
            conexion =new ConexionDataContext();
        } 

        internal List<PROGRAMA> ListProgramas()
        {  
            List<PROGRAMA> listprog = new List<PROGRAMA>();
            var query = from rep in conexion.PROGRAMA
                        where (rep.ELIMINADO==0)
                        select rep;
            listprog = query.ToList<PROGRAMA>();
            return listprog;    
        }

        internal void getListProgramas_Equipo(DataGridView grid_Programas, string idEquiposelected)
        {
            int i = 1;            
            var resultado = from rep in conexion.RELACION_EQUI_PROG
                            join eq in conexion.EQUIPO on rep.IDEQUIPO equals eq.IDEQUIPO
                            join p in conexion.PROGRAMA on rep.IDPROGRAMA equals p.IDPROGRAMA
                            where eq.IDEQUIPO == idEquiposelected
                            select new
                            {
                                p.IDPROGRAMA,
                                p.NOMBREPROGRAMA
                            };
            grid_Programas.Rows.Clear();
            foreach (var r in resultado)
            {
                grid_Programas.Rows.Add(new object[] { i.ToString(), r.IDPROGRAMA, r.NOMBREPROGRAMA});
                i++;
            }                                                        
        }

        internal int? getNumPrioridad(string p)
        {
            int r = 0;            
            switch (p)
            {
                case "Alta": r = 1; break;
                case "Media": r = 2; break;
                case "Baja": r = 3; break;
            }
            return r;
        }

        internal DialogResult registrarProbHardware(PROBLEMA p)
        {
            DialogResult result = DialogResult.Cancel;
            try
            {
                //obtenemos el idproblema
                int idprob = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDPROBLEMA);
                int tickHw = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_TICKETHW);
                string numero = Convert.ToString(idprob);
                string numero2 = numero.Trim().PadLeft(5, '0');
                string numero3 = Convert.ToString(tickHw);
                string numero4 = numero3.Trim().PadLeft(8,'0');
                string idproblema = "PRO_" + numero2;
                string ticket = "HW" + numero4;
                //obtenemos el idtipproblema
                string idtipoProblema = conexion.PROBLEMA_TIPO.Single(x => x.TIPO_PROBLEMA == "hardware").IDTIPOPROBLEMA;
                p.IDPROBLEMA = idproblema;
                p.IDTIPOPROBLEMA = idtipoProblema;
                p.TICKET = ticket;
                conexion.PROBLEMA.InsertOnSubmit(p);
                conexion.SubmitChanges();
                conexion.increm_ContadorIdProblema();
                conexion.increm_ContadorTicketHw();
                result = DialogResult.OK;
            }
            catch (Exception)
            {
                result = DialogResult.Cancel;
            }
            return result;                 
        }

        internal DialogResult registrarProbSoftware(PROBLEMA p)
        {
            DialogResult result = DialogResult.Cancel;
            try
            {
                //obtenemos el idproblema
                int idprob = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDPROBLEMA);
                int tickSw = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_TICKETSW);
                string numero = Convert.ToString(idprob);
                string numero2 = numero.Trim().PadLeft(5, '0');
                string numero3 = Convert.ToString(tickSw);
                string numero4 = numero3.Trim().PadLeft(8, '0');
                string idproblema = "PRO_" + numero2;
                string ticket = "SW" + numero4;
                //obtenemos el idtipproblema
                string idtipoProblema = conexion.PROBLEMA_TIPO.Single(x => x.TIPO_PROBLEMA == "software").IDTIPOPROBLEMA;
                p.IDPROBLEMA = idproblema;
                p.IDTIPOPROBLEMA = idtipoProblema;
                p.TICKET = ticket;
                conexion.PROBLEMA.InsertOnSubmit(p);
                conexion.SubmitChanges();
                conexion.increm_ContadorIdProblema();
                conexion.increm_ContadorTicketSw();
                result = DialogResult.OK;
            }
            catch (Exception)
            {
                result = DialogResult.Cancel;
            }
            return result;
        }

        internal DialogResult tieneProblema_Equipo(string idequipo)
        {
            int countResult = conexion.PROBLEMA.Where(x => x.IDEQUIPO == idequipo && x.ESTADO == "pendiente" && x.IDTIPOPROBLEMA == "TIP_01").Count();
            if (countResult > 0)
                return DialogResult.OK;
            else
                return DialogResult.Cancel;
        }

        internal DialogResult tieneProblema_Software(string idprograma)
        {
            int countResult = conexion.PROBLEMA.Where(x => x.IDPROGRAMA == idprograma && x.ESTADO == "pendiente" && x.IDTIPOPROBLEMA == "TIP_02").Count();
            if (countResult > 0)
                return DialogResult.OK;
            else
                return DialogResult.Cancel;
        }        
    }
}
